package bean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;

import org.primefaces.component.datagrid.DataGrid;
import org.primefaces.component.datatable.DataTable;

import br.com.biblioteca.interfaces.GerenciadorDeCategoria;
import br.com.biblioteca.interfaces.GerenciadorDeEmprestimo;
import br.com.biblioteca.interfaces.GerenciadorDeLivro;
import br.com.biblioteca.model.Categoria;
import br.com.biblioteca.model.Emprestimo;
import br.com.biblioteca.model.Livro;

@ManagedBean
@SessionScoped
public class PrateleiraBEAN implements Serializable {
	
	private static final long serialVersionUID = 1L;
	

	@EJB
	private GerenciadorDeCategoria gerenciadorDeCategoria;
	@EJB
	private GerenciadorDeLivro gerenciadorDeLivro;
	@EJB
	private GerenciadorDeEmprestimo gerenciadorDeEmprestimo;

	
	private DataGrid datagrid;
	private DataTable datatable;
	private DataTable datatableEmprestimo;
	private Categoria categoria;
	private ArrayList<Livro> livros;
	private Livro livro;
	private Emprestimo emprestimo;
	
	
	public PrateleiraBEAN(){
		LoginBEAN loginBean = (LoginBEAN) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("loginBEAN");
		emprestimo = new Emprestimo();
		emprestimo.setUsuario(loginBean.getUser());
		emprestimo.setLivros(new ArrayList<Livro>());
	}
	
	public String adicionarLivro(){
		livro = (Livro) datagrid.getRowData();
		emprestimo.getLivros().add(livro);
		FacesContext context = FacesContext.getCurrentInstance(); 
		context.addMessage(null, new FacesMessage("Successful", "Livro adicionado com sucesso!! "));
		return "";
	}
	
	public String deletarLivro(){
		livro = (Livro) datatableEmprestimo.getRowData();
		emprestimo.getLivros().remove(livro);
		return "";
	}
	
	public String fazerEmprestimo(){
		LoginBEAN loginBean = (LoginBEAN) FacesContext.getCurrentInstance().getExternalContext().getSessionMap().get("loginBEAN");
		emprestimo.setDataReseva(new Date());
		emprestimo.setStatus("R");
		gerenciadorDeEmprestimo.adicionarEmprestimo(emprestimo);
		emprestimo = new Emprestimo();
		emprestimo.setUsuario(loginBean.getUser());
		emprestimo.setLivros(new ArrayList<Livro>());
		return "";
	}
	
	public String limparEmprestimo(){
		emprestimo.setLivros(new ArrayList<Livro>());
		return "";
	}

	public Livro getLivro() {
		return livro;
	}

	public void setLivro(Livro livro) {
		this.livro = livro;
	}

	public String listarLivros(){
		categoria = (Categoria) datatable.getRowData();
		livros = (ArrayList<Livro>) gerenciadorDeLivro.getLivros(categoria);
		return "";
	}
	
	public List<Categoria> getCategorias() {
		return gerenciadorDeCategoria.getCategorias();
	}
	public DataTable getDatatable() {
		return datatable;
	}

	public void setDatatable(DataTable datatable) {
		this.datatable = datatable;
	}
	
	public ArrayList<Livro> getLivros(){
		return livros;
	}
	
	public DataGrid getDatagrid() {
		return datagrid;
	}

	public void setDatagrid(DataGrid datagrid) {
		this.datagrid = datagrid;
	}

	public Emprestimo getEmprestimo() {
		return emprestimo;
	}

	public void setEmprestimo(Emprestimo emprestimo) {
		this.emprestimo = emprestimo;
	}

	public DataTable getDatatableEmprestimo() {
		return datatableEmprestimo;
	}

	public void setDatatableEmprestimo(DataTable datatableEmprestimo) {
		this.datatableEmprestimo = datatableEmprestimo;
	}
	
}
